<?php 
/**
 * Classe Estática para funções comuns ao site
 */
final class Common{
	
	/**
	 * Retorna a tag img para um dado post
	 * @param $id
	 * @param $size
	 * @return string Tag img da imagem
	 * @access public
	 */
	public static function getLastPostImage($id = 0, $size = "medium", $alt = ""){
		$id = ($id)? $id : $post_id;
		
		$arrToOut = get_children(
			array( 
				'post_parent'	=> $id,
				'post_type'		=> 'attachment', 
				'numberposts'	=> 1,
				'post_mime_type'=> 'image',
				'order' => 'DESC',
				'orderby' => 'menu_order'
			)
		);
		
		$arrToOut = new ArrayObject($arrToOut);
		
		if ($arrToOut->count() === 0){
			return "&nbsp;";
		}
		
		$interator = $arrToOut->getIterator();
		$alt = ($alt == "")? $interator->current()->post_title : $alt;
		
		echo get_image_tag($interator->current()->ID, $alt, '', '', $size);
		
	}
	
	/**
	 * Retorna a tag img para um dado post
	 * @param $name
	 * @param $size
	 * @return string Tag img da imagem
	 * @access public
	 */
	public static function getPostImageByName($id, $name, $size = "full", $alt = "", $echo = true){
		$arrToOut = get_children(
			array( 
				'post_parent'	=> $id,
				'post_type'		=> 'attachment', 
				'numberposts'	=> -1,
				'post_mime_type'=> 'image'
			)
		);
		
		$name = "/".$name."/";
		
		$images = new ArrayObject();
		
		foreach ($arrToOut as $image) {
			if (preg_match($name, strtolower($image->post_excerpt))) {
				$images[] = $image;
			}
		}
		
		if ($images->count() === 0){
			if($echo){
				echo "&nbsp;";
				return;
			}else{
				return "&nbsp;";
			}
		}
		
		$interator = $images->getIterator();
		$alt = ($alt == "")? $interator->current()->post_title : $alt;
		
		if($echo){
			echo get_image_tag($interator->current()->ID, $interator->current()->post_title, '', '', $size);
			return;
		}else{
			return get_image_tag($interator->current()->ID, $interator->current()->post_title, '', '', $size);
		}
		
	}
	
	/**
	 * Retorna o resumo do post sem tags e com a possibilidade de limitar a saida a um número de palavras
	 * @param $size int tamanho do resumo medido em palavras
	 * @return string resumo do post
	 * @access public
	 */
	public static function getExcerpt($size = 0){
		if($size == 0){
			return strip_tags(get_the_excerpt());
		}else{
			return self::wordLimiter(strip_tags(get_the_excerpt()), $size);
		}
	}
	
	/**
	 * Word Limiter
	 *
	 * Limita uma string a X palavras.
	 *
	 * @access	public
	 * @param	string
	 * @param	integer
	 * @param	string	the end character. Usually an ellipsis
	 * @return	string
	 * @access public
	 */	
	public static function wordLimiter($str, $limit = 100, $end_char = '&#8230;'){
		if (trim($str) == ''){
			return $str;
		}
	
		preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);
			
		if (strlen($str) == strlen($matches[0])){
			$end_char = '';
		}
		
		return strip_tags(rtrim($matches[0])).$end_char;
	}
	
	/**
	 * Retorna o link da categoria pelo slug
	 * @param $slug string O slug da categoria
	 * @param $echo boolean se true, será impresso na página caso contrário retornará o valor
	 * @return [boolean|string] 
	 */
	public static function getCategoryLinkBySlug($slug, $echo = true){
		$category = get_category_by_slug($slug);
		
		if(count($category > 0)){
			$link = get_category_link($category->cat_ID);
			if($echo){
				echo($link);
			} else {
				return $link;
			}
			
			return true;
		}
		
		return false;
	}
	
	/**
	 * Retorna o link da página pelo título
	 * @param $name string O título da página
	 * @param $echo boolean se true, será impresso na página caso contrário retornará o valor
	 * @return string link da página
	 */
	public static function getPageLinkByName($name, $echo = true){
		$page_ = get_page_by_title($name);
		$link = get_page_link($page_->ID);
		
		if($echo){
			echo $link; 
		}else{
			return $link; 
		}
	}
	
	/**
	 * Retorna o link da página pela slug
	 *
	 * @param $name string O título da página
	 * @param $echo boolean se true, será impresso na página caso contrário retornará o valor
	 * @return string link da página
	 */
	function getPageLinkBySlug($name, $echo = true) {
		global $wpdb;
		
		$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='page'", $name ));
		
		if ($page){
			$link = get_page_link($page);
			
			if($echo){
				echo apply_filters('the-permalink',$link); 
			}else{
				return apply_filters('the-permalink',$link); 
			}
		}
	
		return null;
	}
	
	/**
	 * Retorna o id da página pela slug
	 *
	 * @param $name string O título da página
	 * @return string id da página
	 */
	function geti18nPageLinkBySlug($name, $echo = true) {
		if(!function_exists('wpml_link_to_element')) return;
		global $wpdb;
		
		$page = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='page'", $name ));
		
		$link =  wpml_link_to_element($page, 'page','',array(),'',false);
		
		$link =  preg_replace('/^.* href="(.+)?".*/', '\1', $link);
		
		if($echo){
			echo($link);
		}else{
			return $link? $link: null;
		}
	}
	
	public static function getCategoryFromSinglePost($id = false, $echo = true){
		$arr = get_the_category($id);
		
		if(count($arr) > 0){
			if($echo){
				echo $arr[0]->name;
			}else{
				return $arr[0]->name;
			}
		} else {
			return false;
		}
	}
	
	public static function getActiveLanguage(){
		if(!function_exists("icl_get_languages")) return;
		
		$active_language = icl_get_languages();
		
		foreach($active_language as $language){
			if($language['active']){
				$active_language = $language['language_code'];
			}
			break;
		}
		
		return $active_language;
	}
}